﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections.Specialized;
using System.Web;
using GtsServer.Common;
using System.Runtime.Serialization;

namespace GtsServer.Service.Model
{
    [DataContract]
    public class BaseRequest<T>
    {
        public BaseRequest() { }
        public BaseRequest(T model, Stream input)
        {
            try
            {
                SetObjectValue<T>(model, input);
            }
            catch (Exception)
            {

                throw;
            }
        }
        public BaseRequest(T model, string request)
        {
            try
            {
                SetObjectValue<T>(model, request);
            }
            catch
            {
                throw;
            }
        }

        public static T SetObjectValue<T>(T model, string input)
        {
            //input = input.Replace("\\","\\\\");
            return JsonHelper.ParseJSON<T>(input);
        }


        public static T SetObjectValue<T>(T model, Stream input)
        {
            string param = "";
            using (StreamReader sr = new StreamReader(input))
            {
                param = sr.ReadToEnd();
                //param = param.Replace("\\", "\\\\");
                //LogHelper.WriteLog(param);
            }
            return JsonHelper.ParseJSON<T>(param);
        }

        //public string Command { get; set; }
        //public int ShopID { get; set; }
        ///// <summary>
        ///// 手机分辨率
        ///// </summary>
        //public string Resolution { get; set; }
        ///// <summary>
        ///// 1-android 2-Iphone
        ///// </summary>
        //public int ClientType { get; set; }
        //public static void SetObjectValue(BaseRequest request, string input)
        //{
        //    //if (null == input || string.Empty == input)
        //    //    throw new ArgumentNullException("Get参数为空");
        //    try
        //    {

        //        NameValueCollection qs = HttpUtility.ParseQueryString(input);
        //        foreach (var item in request.GetType().GetProperties())
        //        {
        //            object value;
        //            switch (item.PropertyType.Name.ToUpper())
        //            {
        //                case "STRING":
        //                    value = qs[item.Name];
        //                    break;
        //                case "INT32":
        //                    Int32 int32Value = 0;
        //                    Int32.TryParse(qs[item.Name], out int32Value);
        //                    value = int32Value;
        //                    break;
        //                case "INT64":
        //                    value = Convert.ToInt64(qs[item.Name]);
        //                    break;
        //                default:
        //                    value = qs[item.Name];
        //                    break;
        //            }
        //            item.SetValue(request, value, null);
        //        }
        //    }
        //    catch
        //    {
        //        throw new Exception("Get参数值转换失败");
        //    }
        //}
        //public static void SetObjectValue(BaseRequest request, Stream input)
        //{
        //    string param = "";
        //    //if (input == null)
        //    //{
        //    //    throw new ArgumentNullException("POST参数为NULL");
        //    //}
        //    try
        //    {

        //        using (StreamReader sr = new StreamReader(input))
        //        {
        //            param = sr.ReadToEnd();
        //            LogHelper.WriteLog(param);
        //            NameValueCollection qs = HttpUtility.ParseQueryString(param);
        //            foreach (var item in request.GetType().GetProperties())
        //            {
        //                object value;
        //                switch (item.PropertyType.Name.ToUpper())
        //                {
        //                    case "STRING":
        //                        value = qs[item.Name];
        //                        break;
        //                    case "INT32":
        //                        Int32 int32Value = 0;
        //                        Int32.TryParse(qs[item.Name], out int32Value);
        //                        value = int32Value;
        //                        break;
        //                    case "INT64":
        //                        Int64 int64Value = 0;
        //                        Int64.TryParse(qs[item.Name], out int64Value);
        //                        value = int64Value;
        //                        break;
        //                    default:
        //                        value = qs[item.Name];
        //                        break;
        //                }
        //                item.SetValue(request, value, null);
        //            }
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        throw new Exception("Post参数值转换失败.参数：" + param, ex);
        //    }
        //}

    }
}
